一路走來,我們目前在 n8n 用了六個節點一層層堆積,依序建立一個有著以下功能的流程:
此時我們已經離小成果剩最後一哩路了,不知道你有沒有發現,昨天我們在執行完最後一個節點後(AI 摘要),顯示的摘要末端有一個換行號(\n
),如果沒有注意到的話,現在可以再執行一次你的流程,或是點進上一篇看看我最後貼的圖片。
這是 Gemini 或是其他生成式 AI 工具的輸出習慣,而會有這個習慣的原因有以下兩點:
\n
不僅僅是換行,它是一個強烈的 「區塊結束」信號,比單純停在句號更能明確表示一個完整的回應已經結束。AI 把換行符號當成是「一段話講完了」的訊號,讓它產出的內容看起來更像一篇完整的文章,符合它在訓練時學到的寫作習慣。而這種習慣在我們接下來要做的事情上有些不利,在等等操作的時候會再解釋。
事不宜遲,我們先來新增節點吧!
Code
節點清理文字格式在第二個 HTTP Request
節點後面新增 Code
節點。
新增這個節點的目的很簡單,就是要把 AI 摘要完的內容進行「刪除換行符號」的清理動作。
Run Once for All Items
JavaScript
// 取得 Gemini API 的回傳結果
const geminiResponse = $input.first().json;
// 提取出摘要文字
const abstractText = geminiResponse.candidates[0].content.parts[0].text;
// 移除文字末尾的換行符號
const cleanedText = abstractText.trim();
// 將處理後的文字回傳
return [{
json: {
abstract: cleanedText
}
}];
你可能會想說:「為什麼要這麼大費周章?新增一個節點就為了移除一個換行符號。」
原因在這:我自己在測試的時候就因為那一個 \n
,導致訊息無法傳送到 LINE。
那到底單單一個換行符號是怎麼造成錯誤的呢?
我們看到右邊的 OUTPUT,上面的紅色錯誤訊息:JSON parameter needs to be valid JSON
這行錯誤訊息明顯告訴我們:「n8n 在處理資料時,收到了一段不符合 JSON 格式的字串。」
它在試圖傳送 AI 的摘要文字時,因為最後多了一個不必要的換行符號,導致整段內容在解析時被判定為「不是合法 JSON」。
換句話說,哪怕只是一個不起眼、甚至看不見的 \n
,也可能破壞整個資料格式,導致後續作業出錯。
如果你全部的流程都有跟上,且順利看到 AI 摘要的結果、讓換行號消失,
重要時刻來了:把所有節點串接起來!
既然現在已經搞定摘要的部分,我們回到用來傳送訊息到 LINE 的節點(最後一個節點),把要傳送的訊息欄位都放上去,你就會得到一個:一旦啟動,就能給你新聞摘要和連結的 AI 新聞小編。
JSON
輸入以下程式碼{
"messages": [
{
"type": "text",
"text": "📰 今日新聞摘要:\n{{ $json.abstract }}\n{{ $('RSS Read').item.json.link }}"
}
]
}
💡左側上方可選擇前面的所有節點,底下會顯示個別的輸出結果
{{ $json.abstract }}
: 將上一個節點輸出結果 abstract 拖曳到程式碼中{{ $('RSS Read').item.json.link }}
: 將 RSS Read
節點輸出結果 link 拖曳到程式碼中完成後按下執行,右側沒有輸出結果是正常的,你要去看你的 LINE Bot 是否有傳送程式碼寫的訊息。
你的 LINE Bot 有順利將訊息傳送給你嗎?
如果有,那你這段時間的努力很值得,可以先休息一下;
如果沒有,也不要太氣餒,你一定可以找到是哪裡出了問題,往上仔細看看,是不是程式碼沒打好?或是 LINE 傳送訊息的 URL 打錯了?多檢查一下,你一定可以順利收到它的訊息!
明天 (Day 9)我將會讓這個剛順利完成任務的 AI News Bot 在特定時間傳送訊息給你,真正做到自動化流程這個目標。